package com.sayimo.maker.commons.utils;


import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.Charset;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

import com.alibaba.fastjson.JSONObject;

public class SignUtil {

	/**
	 * 按字段名字母顺序排列
	 * 对参数进行MD5加密取得签名
	 * @param requestMsg
	 * @param token
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static String getSign(Map<String, Object> paramMap,String distDnc) {
		StringBuffer buf = new StringBuffer();
		buf.append(distDnc);
		buf.append("action").append(paramMap.get("action"));
		buf.append("app_key").append(paramMap.get("app_key"));
		buf.append("dist_code").append(paramMap.get("dist_code"));
		buf.append("typeId").append(paramMap.get("typeId"));
		String data = "";
		if(paramMap.get("data") != null && StringUtils.isNotBlank(paramMap.get("data").toString())){
		    data = JSONObject.toJSONString(paramMap.get("data"));
		}
		buf.append("data").append(data);
		
		buf.append("format").append("json");
		buf.append("platform").append("");
		buf.append("sign_method").append("md5");
		buf.append("timestamp").append("");
		buf.append("version").append("1.0");
		buf.append(distDnc);
		return MD5Util.getMd5(buf.toString());
	}
	
	//
	/**
	 * @Package com.sayimo.school.mall.util
	 * @Author TANXIN
	 * @MethodName:saveDataForFile
	 * @Description:将数据信息保存到本地文档
	 * @param url   本地文档目标文件路径
	 * @param data  需保存的数据信息
	 * @param tmp   true为在目标文件的内容后追加数据信息，false为将目标文件的内容清空后再保存数据信息
	 * @return
	 * @Date 2016年8月1日,上午11:34:54
	 */
	public static String saveDataForFile(String url,String data,boolean tmp){
		try  
	    {      
	      // 向文件写入对象写入信息  
	      Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(url,tmp), Charset.forName("UTF-8")));
	      
	      // 写文件        
	      writer.write(data);
	      // 关闭  
	      writer.close();  
	    }  
	    catch (IOException e)  
	    {  
	      //  
	      e.printStackTrace();  
	    }  
    	return "保存到本地文件成功";
	}
	
	public static String getSfSign(Map<String, Object> paramMap){
		StringBuffer buf = new StringBuffer();
		buf.append("075AA454E9EE47A2B7B06935A08D3281");
		buf.append("action").append(paramMap.get("action"));
		String data = "";
		if(paramMap.get("data") != null && StringUtils.isNotBlank(paramMap.get("data").toString())){
		    data = JSONObject.toJSONString(paramMap.get("data"));
		}
		buf.append("data").append(data);
		buf.append("format").append("JSON");
		buf.append("platform").append("FOMS");
		buf.append("sign_method").append("MD5");
		buf.append("timestamp").append("");
		buf.append("075AA454E9EE47A2B7B06935A08D3281");
		System.out.println(buf.toString());
		return MD5Util.MD5Encode(buf.toString(),"utf-8").toUpperCase();
	}
}
